package com.example.core.filter.loadbalance;

import com.example.common.config.ServiceInstance;
import com.example.core.context.GatewayContext;

/**
 * @Author Peng Yisheng
 * @Date 2024/12/3 15:02
 * @Description 负载均衡顶级接口
 */
public interface ILoadBalanceRule {
    /**
     * 通过上下文参数获取服务实例
     *
     * @param ctx
     * @return
     */
    ServiceInstance choose(GatewayContext ctx);

    /**
     * 通过服务ID拿到对应的服务实例
     * // TODO: dubbo传的是invoker，后续看可以怎么重构choose接口
     *
     * @param serviceId
     * @param gray
     * @return
     */
    ServiceInstance choose(String serviceId, boolean gray);
}
